package com.love.usedcar.enums;

import java.util.Arrays;
import java.util.List;

/**
 * 汽车排量枚举类
 * 包含常见的汽车排量类型及相关操作方法
 */
public enum DisplacementEnum {
    // 小排量自然吸气
    DISPLACEMENT_1_0L("1.0L", "1.0升自然吸气"),
    DISPLACEMENT_1_2L("1.2L", "1.2升自然吸气"),
    DISPLACEMENT_1_3L("1.3L", "1.3升自然吸气"),
    DISPLACEMENT_1_4L("1.4L", "1.4升自然吸气"),
    DISPLACEMENT_1_5L("1.5L", "1.5升自然吸气"),
    DISPLACEMENT_1_6L("1.6L", "1.6升自然吸气"),

    // 中等排量自然吸气
    DISPLACEMENT_1_8L("1.8L", "1.8升自然吸气"),
    DISPLACEMENT_2_0L("2.0L", "2.0升自然吸气"),
    DISPLACEMENT_2_4L("2.4L", "2.4升自然吸气"),
    DISPLACEMENT_2_5L("2.5L", "2.5升自然吸气"),

    // 大排量自然吸气
    DISPLACEMENT_3_0L("3.0L", "3.0升自然吸气"),
    DISPLACEMENT_3_5L("3.5L", "3.5升自然吸气"),
    DISPLACEMENT_4_0L("4.0L", "4.0升自然吸气"),

    // 小排量涡轮增压
    DISPLACEMENT_1_0T("1.0T", "1.0升涡轮增压"),
    DISPLACEMENT_1_2T("1.2T", "1.2升涡轮增压"),
    DISPLACEMENT_1_3T("1.3T", "1.3升涡轮增压"),
    DISPLACEMENT_1_4T("1.4T", "1.4升涡轮增压"),
    DISPLACEMENT_1_5T("1.5T", "1.5升涡轮增压"),

    // 中等排量涡轮增压
    DISPLACEMENT_1_6T("1.6T", "1.6升涡轮增压"),
    DISPLACEMENT_1_8T("1.8T", "1.8升涡轮增压"),
    DISPLACEMENT_2_0T("2.0T", "2.0升涡轮增压"),
    DISPLACEMENT_2_3T("2.3T", "2.3升涡轮增压"),
    DISPLACEMENT_2_5T("2.5T", "2.5升涡轮增压"),

    // 大排量涡轮增压
    DISPLACEMENT_3_0T("3.0T", "3.0升涡轮增压"),
    DISPLACEMENT_3_6T("3.6T", "3.6升涡轮增压"),
    DISPLACEMENT_4_0T("4.0T", "4.0升涡轮增压"),
    DISPLACEMENT_4_4T("4.4T", "4.4升涡轮增压"),
    DISPLACEMENT_5_0T("5.0T", "5.0升涡轮增压"),

    // 新能源及特殊类型
    ELECTRIC("Electric", "纯电动（无传统排量）"),
    PLUG_IN_HYBRID("PHEV", "插电式混合动力"),
    HYBRID("HEV", "混合动力");

    private final String code;
    private final String desc;

    DisplacementEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 根据代码获取枚举实例
     * @param code 排量代码
     * @return 对应的枚举实例，若未找到则返回null
     */
    public static DisplacementEnum getByCode(String code) {
        if (code == null || code.isEmpty()) {
            return null;
        }
        for (DisplacementEnum displacement : values()) {
            if (displacement.code.equalsIgnoreCase(code)) {
                return displacement;
            }
        }
        return null;
    }

    /**
     * 获取所有枚举实例列表
     * @return 包含所有枚举实例的列表
     */
    public static List<DisplacementEnum> getAll() {
        return Arrays.asList(values());
    }

    /**
     * 判断当前排量是否为涡轮增压类型
     * @return 若是涡轮增压则返回true，否则返回false
     */
    public boolean isTurbocharged() {
        return code.endsWith("T") && !isNewEnergy();
    }

    /**
     * 判断当前排量是否为自然吸气类型
     * @return 若是自然吸气则返回true，否则返回false
     */
    public boolean isNaturallyAspirated() {
        return code.endsWith("L") && !isNewEnergy();
    }

    /**
     * 判断当前是否为新能源类型
     * @return 若是新能源类型则返回true，否则返回false
     */
    public boolean isNewEnergy() {
        return this == ELECTRIC || this == PLUG_IN_HYBRID || this == HYBRID;
    }

    /**
     * 获取排量数值（不包含类型标识）
     * @return 排量数值，若无法解析则返回0
     */
    public double getDisplacementValue() {
        if (isNewEnergy()) {
            return 0;
        }
        try {
            String numericPart = code.replaceAll("[^0-9.]", "");
            return Double.parseDouble(numericPart);
        } catch (NumberFormatException e) {
            return 0;
        }
    }

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
}
